perm filename VARIAN.SAI[PIX,HPM] blob sn#449279 filedate 1979-06-10 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00003 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	BEGIN "VARIAN"
C00006 00003	PRINT("Number of pages across:") NFX←CVD(INCHWL)
C00010 ENDMK
C⊗;
BEGIN "VARIAN"
DEFINE VRN='350;		comment device 350, gents;
comment
  CONO/CONI bits for the VRN (Varian Plotter)
  for the meanings of most of these bits, refer to the
  Varian "SERVICE AND MAINTENANCE MANUAL STATOS 41/42 SERIES PRINTER/PLOTTERS";

DEFINE 
SCNCMP='100000	, comment scan completed	(reado);
NOTRDY='40000	, comment device not ready	(reado);
BUFBZY='20000	, comment buffer busy		(reado);
PRCBZY='10000	, comment paper controller busy	(reado);
FRMBOT='4000	, comment bottom of form	(reado);
REDRDY='1000	, comment read ready		(reado);
NOTONL='400	, comment not on line		(reado);
SUPPLO='200	, comment supplies low		(reado);
VIDBZY='100	, comment video busy		(reado);
INTTST='40	, comment interface test mode	(writo);
DATARQ='20	, comment data request		(reado);
INTENA='10	, comment interrupt enable	(readw);
PIEN33='4	, comment PI bit 33		(readw);
PIEN34='2	, comment PI bit 34		(readw);
PIEN35='1	; comment PI bit 35		(readw);

DEFINE RASTERWRITE='740;
DEFINE LINESYNC='443;
DEFINE RESETAUTO='445;
DEFINE ONESTEP='464;
DEFINE SLEW='665;

REQUIRE "VIXHDR.SAI[VIS,HPM]" SOURCE_FILE;

INTEGER CMDCNT,CMDRUN,CMDWD,RUNCNT,FOO,OCH; BOOLEAN LINES;
INTEGER I,J,K,NFX,NFY,NF,CMD;

PROCEDURE VSINIT; BEGIN  OCH←GETCHAN;
    OPEN(OCH,"DSK",0,0,19,1,FOO,FOO); ENTER(OCH,"VARIAN.DAT[TMP,HPM]",FOO);
    CMDCNT←0; RUNCNT←0; CMDWD←0; CMDRUN←0; END;
REQUIRE VSINIT INITIALIZATION;

REQUIRE "{}{}" DELIMITERS;
DEFINE VSEND={
   CMDCNT←CMDCNT+1; CMDWD←(CMDWD LSH 9) LOR CMD;
   IF CMDCNT=4 THEN
      BEGIN
      IF CMDWD=(CMDWD ROT 18) THEN 
	 IF CMDWD=CMDRUN THEN  RUNCNT←RUNCNT+1 ELSE
	    BEGIN
	    IF RUNCNT=1 THEN OUT(OCH,CVOS(CMDRUN)&'15&'12) ELSE
	    IF RUNCNT>1 THEN
               OUT(OCH,CVOS(('770 LSH 27)+(RUNCNT LSH 18)+(CMDRUN LAND '777777))&'15&'12);
	    RUNCNT←1; CMDRUN←CMDWD;
	    END
      ELSE
	 BEGIN
         IF RUNCNT=1 THEN OUT(OCH,CVOS(CMDRUN)&'15&'12) ELSE
         IF RUNCNT>1 THEN
            OUT(OCH,CVOS(('770 LSH 27)+(RUNCNT LSH 18)+(CMDRUN LAND '777777))&'15&'12);
         RUNCNT←0; CMDRUN←0;
	 OUT(OCH,CVOS(CMDWD)&'15&'12);
	 END;
      CMDCNT←0; CMDWD←0;
      END};
PRINT("Number of pages across:"); NFX←CVD(INCHWL);
PRINT("Number of pages vertically:"); NFY←CVD(INCHWL);
PRINT("Outlines?"); LINES←(INCHWL LAND '137)="Y";
NF←NFX*NFY;

   BEGIN "BIT FILE"
   INTEGER ROW;
   STRING ARRAY SF[1:NF];
   INTEGER ARRAY PIC[1:NF,0:10]; INTEGER ARRAY PCH[1:NF];

   FOR I←1 STEP 1 UNTIL NF DO
      BEGIN  DO PRINT("BIT FILE ",I,":") UNTIL PFLDIM(SF[I]←INCHWL)>0;
             PCH[I]←OPNPFL(SF[I],PIC[I,0]);  END;

   CMD←RASTERWRITE; VSEND; CMD←LINESYNC; VSEND; CMD←RESETAUTO; VSEND;
   FOR ROW←1 STEP 1 UNTIL NFY DO
      BEGIN "ROWS"
      INTEGER MAXL,NFL,NFH;
      NFL←(ROW-1)*NFX+1; NFH←NFL+NFX-1;
      MAXL←PIC[NFL,PCLN];
      FOR I←NFL+1 STEP 1 UNTIL NFH DO MAXL←MAXL MAX PIC[I,PCLN];
      MAXL←MAXL+400;
      FOR I←0 STEP 1 UNTIL MAXL-1 DO
	  BEGIN
	  INTEGER PT,RH,MI,MIP,LO,HI;  INTEGER ARRAY SCNLIN[0:117];

          FOR K←NFL STEP 1 UNTIL NFH DO
             BEGIN
             INTEGER ARRAY SCNLI[0:PIC[K,LNWD]+3];
             IF I<PIC[K,PCLN] THEN
                  ARRYIN(PCH[K],SCNLI[0],PIC[K,LNWD]);
             IF LINES THEN
                BEGIN
                SCNLI[1]←SCNLI[1] LOR '400000000000;
                SCNLI[PIC[K,LNWD]-1]←SCNLI[PIC[K,LNWD]-1] LOR 
                   (1 LSH (PIC[K,LNWD]*36-PIC[K,LNBY]));
                END;
	     MI←(PIC[K,LNWD]-1)%2+1; MIP←(4224*(K-NFL+.5)/NFX)/36+.5;
             LO←(1-MI) MAX -MIP; HI←(PIC[K,LNWD]-1-MI) MIN (117-MIP);
	     FOR J←LO STEP 1 UNTIL HI DO
                SCNLIN[J+MIP]←SCNLIN[J+MIP] LOR SCNLI[J+MI];
             END;

          COMMENT  IF LINES THEN FOR K←0 STEP 1 UNTIL NFX DO
             DPB(1,POINT(1,SCNLIN[(K*4223%NFX)%36],(K*4223%NFX) MOD 36));

	  IF LINES ∧ (I=0 ∨ I=MAXL-400) THEN ARRCLR(SCNLIN,-1);

	  RH←117; WHILE RH>0 ∧ SCNLIN[RH]=0 DO RH←RH-1;
	  IF SCNLIN[RH]≠0 THEN
	  FOR J←0 STEP 2 UNTIL RH DO
	     BEGIN
	     CMD←LDB(PT←POINT(8,SCNLIN[J],7)); VSEND;
	     CMD←ILDB(PT); VSEND;  CMD←ILDB(PT); VSEND;  CMD←ILDB(PT); VSEND;
	     CMD←((SCNLIN[J] LAND '17) LSH 4) LOR (SCNLIN[J+1] LSH -32); VSEND;
	     CMD←LDB(PT←POINT(8,SCNLIN[J+1],11)); VSEND;
	     IF J<116 THEN
		BEGIN
		CMD←ILDB(PT); VSEND;  CMD←ILDB(PT); VSEND;  CMD←ILDB(PT); VSEND;
		END;
	     END;
	  BEGIN CMD←ONESTEP; VSEND; END;
	  END;
      END "ROWS";
   CMD←RESETAUTO; VSEND;
   RELEASE(OCH);
   END "BIT FILE";

END "VARIAN";